package com.pn.taikao.mapper;

import com.pn.taikao.entity.Exam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 考试Mapper
 */
@Mapper
public interface ExamMapper {
    /**
     * 插入考试记录
     */
    int insert(Exam exam);
    
    /**
     * 根据ID查询考试
     */
    Exam selectById(Long id);
    
    /**
     * 根据试卷ID和学生ID查询考试
     */
    Exam selectByPaperIdAndStudentId(@Param("paperId") Long paperId, @Param("studentId") Long studentId);
    
    /**
     * 更新考试状态
     */
    int updateStatus(@Param("id") Long id, @Param("status") String status);
    
    /**
     * 更新考试结束时间
     */
    int updateEndTime(@Param("id") Long id, @Param("endTime") java.time.LocalDateTime endTime);
    
    /**
     * 查询学生的所有考试
     */
    List<Exam> selectByStudentId(@Param("studentId") Long studentId);
    
    /**
     * 根据课程ID查询学生的考试
     */
    List<Exam> selectByStudentIdAndCourseId(@Param("studentId") Long studentId, @Param("courseId") Long courseId);
    
    /**
     * 根据试卷ID查询所有考试记录
     */
    List<Exam> selectByPaperId(@Param("paperId") Long paperId);
    
    /**
     * 查询待判卷的考试列表（包含主观题且未完全判卷的考试）
     * 教师只能查询自己创建的试卷的考试
     */
    List<Exam> selectPendingGrading(@Param("teacherId") Long teacherId);
    
    /**
     * 查询所有已完成的考试记录（管理员/教师查看）
     * 教师只能查询自己创建的试卷的考试
     */
    List<Exam> selectFinishedExams(@Param("teacherId") Long teacherId);
}

